package com.dhecp.project.flowable.service;

import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.project.flowable.domain.ActHistoricActivity;
import com.dhecp.project.flowable.domain.ActHistoricInstance;
import com.dhecp.project.flowable.domain.ActRuntimeInstance;
import com.dhecp.project.flowable.domain.SysProcessInstance;
import org.flowable.task.api.Task;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * @InterfaceName ActProcessService
 * @Description TODO
 * @Author alula
 * @Date 2020-03-31 17:21
 */
public interface ActProcessService {
    /**
     * @param params
     * @return查询运行中的流程
     */
    List<ActRuntimeInstance> queryActRuntimeProcess(Map<String, Object> params);

    /**
     * @param params
     * @return 查询终结中的流程
     */
    List<ActHistoricInstance> queryActFinishProcess(Map<String, Object> params);


    /**
     * @param processInstanceId
     * @return 查询某流程实例下的任务列表
     */
    List<ActHistoricActivity> queryActHistoricActivityByProcInstId(String processInstanceId);

    /**
     * @param sysProcessInstance
     * @return 启动流程
     */
    AjaxResult startProcess(SysProcessInstance sysProcessInstance);

    /**
     * 重置流程（根据单据nid)
     * @param nid
     * @return
     */
    AjaxResult resetProcess(String nid);

    /**
     * 删除流程
     * @param proInsId
     * @return
     */
    AjaxResult deleteProcess(String proInsId);

    /**
     * 更新流程实例状态
     * @param proInsId
     * @param status
     * @return
     */
    AjaxResult updateProcessInstanceStatus(String proInsId, int status);

    /**
     *
     * @param processInstanceId
     * @return 获取流程图
     */
    InputStream getActivitiProccessImage(String processInstanceId);

    /**
     * 插入ACT历史IDENTITYLINK关系表
     * @param id
     * @param type
     * @param userId
     * @param taskId
     * @param procInstId
     * @return
     */
    int insertActHiIdentityLink(String id, String type, String userId, String taskId, String procInstId);

    /**
     * 根据业务表NID，更新自定义流程有备注
     * @param tableDataId
     * @param processRemark
     * @return
     */
    AjaxResult updateSysProcessToBusinessData(String tableDataId, String processRemark, String corpNo, String corpName);

    /**
     * 删除制单环节在设计器中设置的候选人、候选组等配置
     * @param task
     */
    void deleteFirstSegmentUserExpression(Task task);
}
